﻿#ifndef SQLITEIMPLEMENT_H
#define SQLITEIMPLEMENT_H

#include <QtSql/QSqlDatabase>
#include "Measure/PersistenceInterface.h"

class SQLiteImplement : public PersistenceInterface
{
public:
    SQLiteImplement();
    /**
     * @brief saveData 将测量结果存入数据库
     * @param label 数据库文件名，包含完整路径
     * @return 1： 成功
     *         -1: 打开数据库文件失败返回
     *         -2: 数据表 MeasureData 写入数据错误
     */
    int saveData(MeasurementData *data, QString label) override;
    int saveData(MeasurementData *data, QString label, QDateTime t) override;
    /**
     * @brief loadRecipe 加载 Recipe
     * @param data
     * @param label 数据库文件名，包含完整路径
     * @return 1： 成功
     *         -1: 打开数据库文件失败返回
     *         -2: readSpec() 错误
     *         -3: 读出的测点数据量与 PanelInfo 表中的 Pairs 不符
     */
    int loadRecipe(MeasurementData *data, QString label) override;
    /**
     * @brief createRecipe 生成数据库文件，这个文件既是 Recipe 文件，又保存测量结果
     * @param data
     * @param label 数据库文件名，包含完整路径
     * @return  1： 成功返回 1
     *         -1：打开数据库文件失败返回
     *         -2: 建立表 PanelInfo 失败
     *         -3: PanelInfo 表写入数据错误
     *         -4: 建立表 MeasureSpec 失败
     *         -5: 建立表 MeasureData 失败
     *         -6: Spec 为空
     *         -7: MeasureSpec 表写入数据失败
     */
    int createRecipe(MeasurementData *data, QString label) override;

private:
    int writeSpec(MeasurementData *data);
    int readSpec(MeasurementData *data, int N);
    int createTable(MeasurementData *data);
    QSqlDatabase m_database;
};



#endif // SQLITEIMPLEMENT_H
